From 875932770963e03f0daea4923ca1176aea24b41f Mon Sep 17 00:00:00 2001 From: oliskoli Date: Tue, 21 Nov 2006 21:19:29 +0000 Subject: [PATCH] Add cross type/format read/(write) test. --- test-all | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100755 test-all diff --git a/test-all b/test-all new file mode 100755 index 000000000..9bc831657 --- /dev/null +++ b/test-all @@ -0,0 +1,206 @@ +#!/bin/bash + +### cross format read/(write) test ### + +PNAME=${PNAME:-./gpsbabel} +REFGPX="reference/expertgps.gpx" # reference file for all tests +EXCL="ozi vitosmt" # exclude formats from test +CAPS="" +TEMPDIR=/tmp/gb-test-all +CATALOG=/tmp/gb-test-all.done +LOGFILE=/tmp/gb-test-all.log + +# options +vg=0 +prep=0 + +function log_entry() +{ + touch $LOGFILE + echo "-----------------------------------------------------------------------" >> ${LOGFILE} + date >> ${LOGFILE} + echo "$*" >> ${LOGFILE} +} + +function try_run() # command line +{ + local CMD="$*" + local RES=0 + + [ $vg -ne 0 ] && CMD="valgrind -q $CMD" + + ${CMD} > $TEMPDIR/.result 2>&1 + RES=$? + if [ $RES -ne 0 -o -s $TEMPDIR/.result ]; then + if [ $RES -ne 0 ]; then + echo " -- Uhps --" + echo "-----------------------------------------------------------------------" + test -s $TEMPDIR/.result && cat $TEMPDIR/.result + echo "-----------------------------------------------------------------------" + else + echo "" + fi + log_entry "cmd($RES): $CMD" + test -s $TEMPDIR/.result && cat $TEMPDIR/.result >> ${LOGFILE} + return 1 + else + return 0 + fi +} + +function STAGE_1 () # type format +{ + local TYP=$1 + local FMT=$2 + local CMD1 CMD2 IFILE OFILE + + echo "$CAPS" | + + while read type caps format comment; do + + for i in $EXCL; do + if [ "$format" == "$i" ]; then + caps="------" + fi + done + + grep "$TYP: $FMT & $format" ${CATALOG} > /dev/null && continue + + echo -n "testing " + case $TYP in + w) + echo -n "waypoints" + caps=${caps:0:2} + ;; + t) + echo -n "tracks" + caps=${caps:2:2} + ;; + r) + echo -n "routes" + caps=${caps:4:2} + ;; + esac + + echo -n ": \"$FMT\" with \"$format\" " + + IFILE=$TEMPDIR/$TYP-$FMT + OFILE=$TEMPDIR/$TYP-$FMT.$format + + case $caps in + -w) + echo -n "*" + CMD1="${PNAME} -$TYP -i $FMT -f $IFILE -o $format -F $OFILE" + try_run "${CMD1}" || continue + ;; + + rw) + echo -n "*" + CMD1="${PNAME} -$TYP -i $FMT -f $IFILE -o $format -F $OFILE" + try_run "${CMD1}" || continue + echo -n "*" + CMD2="${PNAME} -$TYP -i $format -f $OFILE -o $FMT -F $OFILE.$FMT" + try_run "${CMD2}" || continue + ;; + esac + + echo "*" + echo "$TYP: $FMT & $format" >> $CATALOG + done + return 0 +} + +function STAGE_0 () +{ + echo "$CAPS" | + + while read type caps format comment; do + + for i in $EXCL; do + if [ "$format" == "$i" ]; then + caps="------" + fi + done + + case ${caps:0:2} in + rw) + CMD="${PNAME} -i gpx -f $REFGPX -x nuketypes,routes,tracks -o $format -F $TEMPDIR/w-$format" + try_run "${CMD}" || continue + STAGE_1 "w" $format || exit 1 + ;; + -w) + CMD="${PNAME} -i gpx -f $REFGPX -x nuketypes,routes,tracks -o $format -F $TEMPDIR/w-$format" + try_run "${CMD}" || continue + ;; + esac + case ${caps:2:2} in + rw) + CMD="${PNAME} -t -i gpx -f $REFGPX -x nuketypes,waypoints,routes -o $format -F $TEMPDIR/t-$format" + try_run "${CMD}" || continue + STAGE_1 "t" $format || exit 1 + ;; + -w) + CMD="${PNAME} -t -i gpx -f $REFGPX -x nuketypes,waypoints,routes -o $format -F $TEMPDIR/t-$format" + try_run "${CMD}" || continue + ;; + esac + case ${caps:4:2} in + rw) + CMD="${PNAME} -r -i gpx -f $REFGPX -x nuketypes,waypoints,tracks -o $format -F $TEMPDIR/r-$format" + try_run "${CMD}" || continue + STAGE_1 "r" $format || exit 1 + ;; + -w) + CMD="${PNAME} -r -i gpx -f $REFGPX -x nuketypes,waypoints,tracks -o $format -F $TEMPDIR/r-$format" + try_run "${CMD}" || continue + ;; + esac + done + rm -f $TEMPDIR/.result +} + +rm -rf $TEMPDIR > /dev/null +mkdir -p $TEMPDIR > /dev/null + +while [ $# -gt 0 ]; do + case $1 in + -s|--start) # remove catalog. run the full test. + rm -f $CATALOG + ;; + -v|--valgrind) + vg=1 + ;; + -p|--prepare) # prepare for valgrind check. + prep=1 + ;; + -c|--clean) + trap "rm -fr $TEMPDIR; exit 1" 0 1 2 3 15 + ;; + -r|--reference) + shift + REFGPX=$1 + ;; + esac + shift +done + +if [ $prep -ne 0 ]; then + test -s Makefile && make clean + CFLAGS="-O0" ./configure || exit 1 # -O0 is suggested by vg. + make || exit 1 + echo "All fine. You can do now a 'test-all -v'" + exit 0 +fi + +if test ! -s $REFGPX; then + echo "GPX reference \"$REFGPX\" doesn't exist!" + exit 1 +fi + +touch $CATALOG + +log_entry "test-all started." +echo "Catalog: $CATALOG" >> $LOGFILE + +CAPS=`${PNAME} -^2 | grep "^file"` +STAGE_0 -- 2.30.2